From: Sander Eikelenboom Date: Thu, 22 Jan 2015 17:21:40 +0000 (+0100) Subject: libxl: Prevent qemu closing QMP socket on shutdown before libxl is done with it. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~3847 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=9ba80a722b193c912432d544338f8daf9a846cd7;p=xen.git libxl: Prevent qemu closing QMP socket on shutdown before libxl is done with it. At present on shutdown when using pci-passthrough with qemu-xen, qemu closes the QMP socket before libxl is done with it causing these errors to be logged by libxl: Waiting for domain test (domid 1) to die [pid 11568] Domain 1 has shut down, reason code 0 0x0 Action for shutdown reason code 0 is destroy Domain 1 needs to be cleaned up: destroying the domain libxl: error: libxl_qmp.c:443:qmp_next: Socket read error: Connection reset by peer libxl: error: libxl_qmp.c:701:libxl__qmp_initialize: Failed to connect to QMP libxl: error: libxl_qmp.c:686:libxl__qmp_initialize: Connection error: Connection refused libxl: error: libxl_dm.c:1588:kill_device_model: Device Model already exited Done. Exiting now Prevent this by using the qemu '-no-shutdown' parameter which is described as doing: "Don’t exit QEMU on guest shutdown, but instead only stop the emulation. This allows for instance switching to monitor to commit changes to the disk image." So Qemu will stop emulating, but keeps the QMP socket open and waits for libxl to kill the qemu process when it is done, preventing the race and resulting in this to be logged by libxl: Waiting for domain test (domid 1) to die [pid 10859] Domain 1 has shut down, reason code 0 0x0 Action for shutdown reason code 0 is destroy Domain 1 needs to be cleaned up: destroying the domain Done. Exiting now Signed-off-by: Sander Eikelenboom Acked-by: Stefano Stabellini --- diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c index d8d6f0c913..73de5c353f 100644 --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -443,6 +443,7 @@ static char ** libxl__build_device_model_args_new(libxl__gc *gc, "path=%s/qmp-libxl-%d,server,nowait", libxl__run_dir_path(), guest_domid)); + flexarray_append(dm_args, "-no-shutdown"); flexarray_append(dm_args, "-mon"); flexarray_append(dm_args, "chardev=libxl-cmd,mode=control");